`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 2022/03/16 20:20:04
// Design Name: 
// Module Name: DataMem
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////


module DataMem(
input logic clk,
input logic [31:0] A,                  //地址
input logic [31:0] WD,                 //要写入的数据
input logic [3:0] WE,                  //写使能（一个字节一位） 
output logic [31:0] RD                 //读出的数据
    );
parameter  N = 4096;
logic [31:0] DMEM [0:N-1];             //数据存储器
//初始化
initial begin
    for(int i=0;i<N;i++)
        DMEM[i]=i;
end
//读数据
assign RD=DMEM[A[31:2]];               //数据读出
//写数据，下降沿写入
always_ff@(negedge clk)                 
begin
    case(WE)                          //根据写使能信号将数据写入DMEM
        4'b0001:DMEM[A[31:2]][7:0]<=WD[7:0];
        4'b0011:DMEM[A[31:2]][15:0]<=WD[15:0];
        4'b1111:DMEM[A[31:2]]<=WD;
        default:;
    endcase
end

endmodule
